package com.hlpedu.mapper;

import com.hlpedu.pojo.TbEmp;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 持久层接口
 * 主要作用是关联映射文件
 */
public interface TbEmpMapper {
    //delete from tb_emp where emp_id in(3,7);
    /**
     * 根据传递的id列表批量删除员工信息
     * @param ids 条件
     * @return 删除成功返回大于0的整数；反之返回0
     */
    int batchDelEmpByIds(Integer[] ids);
    /**根据指定id删除员工信息
     * @param id 条件
     * @return 删除成功返回大于0的整数；反之返回0
     */
    @Delete("delete from tb_emp where emp_id=#{emp_id}")
    int deleteEmp(Integer id);
    /**
     * 根据指定id修改员工信息
     * @param tbEmp 使用tbEmp对象封装参数
     * @return 更新成功返回大于0的整数；反之返回0
     */
    @Update("update tb_emp set emp_name=#{emp_name},age=#{age} where emp_id=#{emp_id}")
    int updateEmpById(TbEmp tbEmp);
    /**
     * 新增记录
     * @param tbEmp 使用tbEmp对象封装参数
     * @return 新增成功返回大于0的整数；反之返回0
     */
    @Insert("insert into tb_emp(emp_id,emp_name,age) values(null,#{emp_name},#{age})")
    int addEmp(TbEmp tbEmp);
    /**
     * 根据员工的编号和姓名做模糊查询实现方式一：通过实体类对象封装参数
     * @param tbEmp 查询条件
     * @return 根据条件的记录行
     * @Param注解的作用是给方法形参起别名，参数命名后就能够根据名称得到参数值，并将参数值正确的传递到Sql语句中
     * 别名必须和#{}的变量名一致
     */
    @Select("select * from tb_emp where emp_id=#{emp_id} and emp_name like concat('%',#{emp_name},'%')")
    TbEmp queryEmpByJavaBean(TbEmp tbEmp);

   // TbEmp queryEmpByIdAndName(String 明);

    /**
     * 根据员工的编号和姓名做模糊查询实现方式一：通过注解修饰参数
     * @Param empId查询条件
     * @return name查询条件
     * @return 根据条件的记录行
     * @Param注解的作用是给方法形参起别名，参数命名后就能够根据名称得到参数值，并将参数值正确的传递到Sql语句中
     * 别名必须和#{}的变量名一致
     */
/* @Select("select * from tb_emp where emp_id=#{id} and emp_name like concat('%',#{name},'%')")
TbEmp queryEmpByIdAndName(@Param("id") Integer empId, @Param("name") String name);*/

    TbEmp queryEmpByIdAndName();
    /**
     * 统计tb_emp表中记录的行数
     * @return 记录的行数
     */
    @Select("select count(emp_id) from tb_emp")
    int countEmp();
    /**
     * 根据年龄字段排序
     * @param key 查询条件，即排序的方式（升序asc关键字或降序desc关键字)
     * @return 封装符合条件的记录行
     */
    @Select("select * from tb_emp order by age ${key}")
    List<TbEmp> queryEmpByAge(String key);
    /**
     * 根据name字段查询员工信息
     * @param name 查询条件
     * @return 符合条件的记录行
     */
    @Select("select * from tb_emp where emp_name=#{name}")
    TbEmp queryEmpByName(String name);
    /**
     * 根据name字段中的指定字符模糊查询
     * @param name 查询条件
     * @return 封装集合条件的记录行
     */
    List<TbEmp> queryEmpByLike(String name);
    /**
     * 根据指定ID查询用户信息
     * @return 符合条件的记录行
     */
    TbEmp queryEmpById(Integer id);
    /**
     * 查询tb_emp表中所有记录行
     * @return 将查询结果封装到list集合中，集合中的每一个元素都是一个TbEmp对象
     * @return
     */
    List<TbEmp> queryAllEmp();

    TbEmp queryEmpByIdAndName(int i, String 明);
}
